package com.dtborad.myblog.common;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

@Component
@Slf4j
public class FileUploadUtil {
    /**
     * 项目端口
     */
    @Value("${server.port}")
    private String port;

    /**
     * 项目路径
     */
    @Value("${server.servlet.context-path}")
    private String contextPath;

    /**
     * 上传文件 * * @param multipartFile 文件对象 * @param dir 上传目录 * @return
     */
    public Result<Object> uploadFile(MultipartFile multipartFile, String dir) {

        try {

            if (multipartFile.isEmpty()) {
                return Result.ofFail("400", "请选择文件");
            }
            // 获取文件的名称
            String originalFilename = multipartFile.getOriginalFilename();
            // 文件后缀 例如：.png
            String fileSuffix = null;
            if (originalFilename != null) {
                fileSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            }
            // uuid 生成文件名
            String uuid = String.valueOf(UUID.randomUUID());
            // 根路径，在 resources/static/upload
            String basePath = ResourceUtils.getURL("classpath:").getPath() + "fileStore/" + (StringUtils.isNotBlank(dir) ? (dir + "/") : "");
            // 新的文件名，使用uuid生成文件名
            String fileName = uuid + fileSuffix;
            log.info("basePath-------" + basePath);
            // 创建新的文件
            File fileExist = new File(basePath);
            // 文件夹不存在，则新建
            if (!fileExist.exists()) {

                fileExist.mkdirs();
            }
            // 获取文件对象
            File file = new File(basePath, fileName);
            // 完成文件的上传
            multipartFile.transferTo(file);
            // 返回绝对路径
            return Result.ofSuccess("上传成功");
        } catch (Exception e) {

            e.printStackTrace();
        }
        return Result.ofFail("500", "上传失败");
    }
}
